/**
 * 校验工具函数
 */

/**
 * 校验手机号码
 * @param phone 手机号码
 * @returns 是否是有效的手机号码
 */
export const isValidPhone = (phone: string): boolean => {
  // 中国大陆手机号码校验
  const reg = /^1[3-9]\d{9}$/;
  return reg.test(phone);
};

/**
 * 校验邮箱
 * @param email 邮箱
 * @returns 是否是有效的邮箱
 */
export const isValidEmail = (email: string): boolean => {
  const reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
  return reg.test(email);
};

/**
 * 校验身份证号码
 * @param idCard 身份证号码
 * @returns 是否是有效的身份证号码
 */
export const isValidIdCard = (idCard: string): boolean => {
  // 简单的15位或18位身份证校验
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  return reg.test(idCard);
};

/**
 * 校验密码强度
 * @param password 密码
 * @param options 选项
 * @returns 密码强度评级：0-弱，1-中，2-强
 */
export const checkPasswordStrength = (
  password: string,
  options: {
    minLength?: number;
    requireNumber?: boolean;
    requireLowercase?: boolean;
    requireUppercase?: boolean;
    requireSpecial?: boolean;
  } = {}
): number => {
  const {
    minLength = 8,
    requireNumber = true,
    requireLowercase = true,
    requireUppercase = true,
    requireSpecial = true,
  } = options;

  let strength = 0;
  
  // 检查长度
  if (password.length >= minLength) {
    strength += 1;
  }
  
  // 计算满足条件的数量
  let conditionsMet = 0;
  
  // 检查是否包含数字
  if (requireNumber && /\d/.test(password)) {
    conditionsMet += 1;
  }
  
  // 检查是否包含小写字母
  if (requireLowercase && /[a-z]/.test(password)) {
    conditionsMet += 1;
  }
  
  // 检查是否包含大写字母
  if (requireUppercase && /[A-Z]/.test(password)) {
    conditionsMet += 1;
  }
  
  // 检查是否包含特殊字符
  if (requireSpecial && /[!@#$%^&*(),.?":{}|<>]/.test(password)) {
    conditionsMet += 1;
  }
  
  // 根据满足条件的数量增加强度
  if (conditionsMet >= 3) {
    strength += 1;
  }
  
  return strength;
}; 